package com.kmxd.ams.client.arrange;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kmxd.ams.client.arrange.dto.BoxSummaryDTO;
import com.kmxd.ams.client.arrange.dto.DetachDTO;
import com.kmxd.ams.client.arrange.dto.LoadBoxDTO;
import com.kmxd.ams.infra.arrange.base.BaseBO;
import com.kmxd.ams.infra.arrange.entity.Box;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 盒级 服务类
 *
 * @author ZuoLG
 * @since 2022-07-20
 */
public interface IBoxSvc extends IService<Box> {

  /**
   * 分页查询
   *
   * @param reqPage
   * @param req
   * @return
   */
  Page<Box> selectPage(Page reqPage, Box req);

  /**
   * 查询列表
   *
   * @param req
   * @return
   */
  List<Box> selectList(Box req);

  /**
   * 根据ids列表查询对象
   *
   * @param ids
   * @return
   */
  List<Box> selectListByIds(Set<Long> ids);
  /**
   * 新增
   *
   * @param req
   */
  void add(Box req);

  /**
   * 修改
   *
   * @param req
   */
  void edit(Box req);

  /**
   * 删除
   *
   * @param req
   */
  void remove(DetachDTO req);

  /**
   * 查看
   *
   * @param req
   * @return
   */
  Box view(Box req);

  long count(Box req);

  /**
   * 根据分组条件获取流水
   *
   * @param columnMap
   * @return
   */
  Integer getSequence(Map<String, Object> columnMap);

  /**
   * 根据分组规则判断盒号是否重复
   *
   * @param columnMap
   * @return
   */
  Boolean checkBoxSequence(Map<String, Object> columnMap, Integer sequence);

  /**
   * 根据分组获取盒信息
   *
   * @param reqPage
   * @param columnMap
   * @return
   */
  Page<Box> getBoxByGroup(Page reqPage, Map<String, Object> columnMap, LoadBoxDTO req);

  /**
   * 汇总盒内信息
   *
   * @param req
   */
  void summary(BoxSummaryDTO req);

  /**
   * 删除回收站
   *
   * @param req
   * @return
   */
  Boolean cleanTrash(BaseBO req);

  /**
   * 数据还原
   *
   * @param req
   * @return
   */
  Boolean recoveryData(BaseBO req);

  void summary(Box req);

  /**
   * 查询忽略全宗
   *
   * @param req
   * @return
   */
  List<Box> selectListIgnoreFonds(BaseBO req);
}
